// 封装通用的接口调用模块
import axios from 'axios'

// 基准地址
const baseURL = process.env.VUE_APP_BASE_API

// 创建一个独立的实例
const instance = axios.create({
  baseURL: baseURL
})
// 添加响应拦截器
instance.interceptors.response.use(res => {
  // res.data表示后端返回的原始数据
  return res.data
}, (err) => {
  return Promise.reject(err)
})

// 封装通用的接口调用函数
// 1.按照这种方式封装，无论是何种请求方式，都用data传递参数
// 2.method的值不区分大小写
// 3.method可以省略，省略之后，默认采用get请求
export default (options) => {
  let key = null
  if (options.method) {
    // 如果method属性是存在的
    key = options.method.toUpperCase() === 'get' || '' ? 'params' : 'data'
  } else {
    // 如果没有传递method属性，默认采用get请求方式
    key = 'params'
  }
  // toUpperCase() 屏蔽大小写区分
  return instance({
    method: options.method || 'get',
    // 短路运算，如果options.method 为空，就用 get
    url: options.url,
    // data用于传递get请求之外的所有请求方式的数据 post/put/delete
    // params仅仅处理get请求参数

    // ES规则:对象的key可以是动态的变量
    [key]: options.data
    // 对象属性的两种获取方法:
    // 1.对象.属性
    // 2.对象[属性名称]
    // 区别: 方括号方式支持变量
  })
}
